﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IllustratedCsharp7_ch19_EnumeratorsAndIterators
{
    /*产生多个可枚举类型
     有两个方法返回可枚举类型，但类本身不是可枚举类型，因为它没有实现GetEnumrator。
     */
    class Spectrum
    {
        string[] colors = { "violet", "blue", "cyan", "green", "yelloe", "orange", "red" };

        //返回一个可枚举类型
        public IEnumerable<string> UVtoIR()
        {
            for (int i = 0; i < colors.Length; i++)
                yield return colors[i];
        }
        //返回一个可枚举类型
        public IEnumerable<string> IRtoUV()
        {
            for (int i = colors.Length - 1; i >= 0; i--)
                yield return colors[i];
        }

        public IEnumerator<string> GetEnumerator()
        {
            IEnumerable<string> eEnumeraalbe = IRtoUV(); //获取可枚举类型
            return eEnumeraalbe.GetEnumerator();         //获取枚举器
        }
    }
    class chapt19_7
    {
        static void _Main()
        {
            Spectrum spectrum = new Spectrum();

            //使用类枚举方法
            foreach (string color in spectrum.UVtoIR())
                Console.Write($"{color} ");
            Console.WriteLine();

            //使用类枚举方法
            foreach (string color in spectrum.IRtoUV())
                Console.Write($"{color} ");
            Console.WriteLine();

            //使用类对象
            foreach (string color in spectrum)            
                Console.Write($"{color} ");
            Console.WriteLine();


            Console.Read();
        }
       
    }
}
